# -*- coding: utf-8 -*-
"""
@文件    :   students_2cols.py
@时间    :   2022/05/25 08:33:49
@作者    :   YTNetMan
@版本    :   1.0
@邮箱    :   ytnetman@163.com
@版权    :   (C)Copyright 2022-2025
@分类    :   办公自动化
@功能    :   簇状柱状图
            
            当前的图表和子图可以使用plt.gcf()和plt.gca()获得，分别表示Get Current Figure和Get Current Axes()
            在matplotlib中，整个图表为一个figure对象。每个figure对象中可以包含一个或多个axes(即轴域对象)，而axes为坐标轴。
            每个axes对象都是一个拥有自己坐标系统的绘图区域。

            2. plt.subplots_adjust()概述

            plt.subplots_adjust()方法常用的参数有6个。
             
            其语法如下：

            plt.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)

            其中，left, bottom, right, top依次表示四个方向上的，图表与画布边缘之间的距离。
             
            这四个参数的每个参数的取值范围通常都在0-1之间。与其说是“间距”，倒不如说是图像边缘的“坐标”更确切。使用这四个参数时，将画布左下角视为坐标原点，画布的宽和高都视为1。如果参数取值大于1，则可能会出现图像的损失，图像会移动到画布之外，而不会报错。
            且left不能大于等于right，bottom不能大于等于top，如果违反这一点则会发生报错。
             
            wspace和 hspace则分别表示水平方向上图像间的距离和垂直方向上图像间的距离。其的取值是可以取得大于1，具体的则具体情形自行调试选出合适的。这两个参数用于画布有多个子图时



"""

import pandas as pd
from matplotlib import pyplot as plt

students = pd.read_excel('./doc/students_two_col.xlsx')
students.sort_values(by='2017',inplace=True,ascending=False)
print(students)
students.plot.bar(x='Field',y=['2016','2017'],color=['orange','red'])
plt.title('Students International For Field',fontsize=20,fontweight='bold')
plt.xlabel('Field',fontweight='bold')
plt.ylabel('Number',fontweight='bold')

#axes(即轴域对象)
ax = plt.gca()
#set_xticklabels 坐标轴刻度
#rotation=45  旋转45度
#ha='right' 水平，右侧对齐
#有了下面3行代码就可以吧tight_layout（）注释掉了
ax.set_xticklabels(students.Field,rotation=45,ha='right')
#当前的图表
f = plt.gcf()
f.subplots_adjust(left=0.2,bottom=0.42)


#plt.tight_layout()
plt.show()
